#pragma once

#include <initguid.h>
#include <ObjBase.h>

// {7E16D339-03C7-40a9-9A8A-23B4A970823D}
DEFINE_GUID(CLSID_ISort, 0x7e16d339, 0x3c7, 0x40a9, 0x9a, 0x8a, 0x23, 0xb4, 0xa9, 0x70, 0x82, 0x3d);

// {C64C0FDA-163C-494f-AEA2-275B2AA7ACB7}
DEFINE_GUID(IID_ISort, 0xc64c0fda, 0x163c, 0x494f, 0xae, 0xa2, 0x27, 0x5b, 0x2a, 0xa7, 0xac, 0xb7);

#undef INTERFACE
#define INTERFACE ISort
DECLARE_INTERFACE_(INTERFACE, IUnknown)
{
    STDMETHOD(QueryInterface)(THIS_ REFIID, void **) PURE;
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    STDMETHOD_(ULONG, Release)(THIS) PURE;
    STDMETHOD(Sort)(THIS_ void *, DWORD, DWORD) PURE;
};

// {0CAE0928-E36A-4395-B9FA-CB38268A5E16}
DEFINE_GUID(DIID_ICompare, 0xcae0928, 0xe36a, 0x4395, 0xb9, 0xfa, 0xcb, 0x38, 0x26, 0x8a, 0x5e, 0x16);

#undef INTERFACE
#define INTERFACE ICompare
DECLARE_INTERFACE_(INTERFACE, IUnknown)
{
    STDMETHOD(QueryInterface)(THIS_ REFIID, void **) PURE;
    STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    STDMETHOD_(ULONG, Release)(THIS) PURE;
    STDMETHOD_(LONG, Compare)(THIS_ const void *, const void *) PURE;
};
